#!/bin/bash
#
# lib/cinder_backends/ceph
# Configure the ceph backend

# Enable with:
#
#   CINDER_ENABLED_BACKENDS+=,ceph:ceph
#
# Optional parameters:
#   CINDER_BAK_CEPH_POOL=<pool-name>
#   CINDER_BAK_CEPH_USER=<user>
#   CINDER_BAK_CEPH_POOL_PG=<pg-num>
#   CINDER_BAK_CEPH_POOL_PGP=<pgp-num>

# Dependencies:
#
# - ``functions`` file
# - ``cinder`` configurations

# configure_ceph_backend_lvm - called from configure_cinder()


# Save trace setting
_XTRACE_CINDER_CEPH=$(set +o | grep xtrace)
set +o xtrace


# Defaults
# --------

CINDER_BAK_CEPH_POOL=${CINDER_BAK_CEPH_POOL:-backups}
CINDER_BAK_CEPH_POOL_PG=${CINDER_BAK_CEPH_POOL_PG:-8}
CINDER_BAK_CEPH_POOL_PGP=${CINDER_BAK_CEPH_POOL_PGP:-8}
CINDER_BAK_CEPH_USER=${CINDER_BAK_CEPH_USER:-cinder-bak}


# Entry Points
# ------------

# configure_cinder_backend_ceph - Set config files, create data dirs, etc
# configure_cinder_backend_ceph $name
function configure_cinder_backend_ceph {
    local be_name=$1

    iniset $CINDER_CONF $be_name volume_backend_name $be_name
    iniset $CINDER_CONF $be_name volume_driver "cinder.volume.drivers.rbd.RBDDriver"
    iniset $CINDER_CONF $be_name rbd_ceph_conf "$CEPH_CONF_FILE"
    iniset $CINDER_CONF $be_name rbd_pool "$CINDER_CEPH_POOL"
    iniset $CINDER_CONF $be_name rbd_user "$CINDER_CEPH_USER"
    iniset $CINDER_CONF $be_name rbd_secret_uuid "$CINDER_CEPH_UUID"
    iniset $CINDER_CONF $be_name rbd_flatten_volume_from_snapshot False
    iniset $CINDER_CONF $be_name rbd_max_clone_depth 5
    iniset $CINDER_CONF DEFAULT glance_api_version 2

    if is_service_enabled c-bak; then
        sudo ceph -c ${CEPH_CONF_FILE} osd pool create ${CINDER_BAK_CEPH_POOL} ${CINDER_BAK_CEPH_POOL_PG} ${CINDER_BAK_CEPH_POOL_PGP}
        if [ "$REMOTE_CEPH" = "False" ]; then
            # Configure Cinder backup service options, ceph pool, ceph user and ceph key
            sudo ceph -c ${CEPH_CONF_FILE} osd pool set ${CINDER_BAK_CEPH_POOL} size ${CEPH_REPLICAS}
            if [[ $CEPH_REPLICAS -ne 1 ]]; then
                sudo ceph -c ${CEPH_CONF_FILE} osd pool set ${CINDER_BAK_CEPH_POOL} crush_ruleset ${RULE_ID}
            fi
        fi
        sudo ceph -c ${CEPH_CONF_FILE} auth get-or-create client.${CINDER_BAK_CEPH_USER} mon "allow r" osd "allow class-read object_prefix rbd_children, allow rwx pool=${CINDER_BAK_CEPH_POOL}, allow rwx pool=${CINDER_CEPH_POOL}" | sudo tee ${CEPH_CONF_DIR}/ceph.client.${CINDER_BAK_CEPH_USER}.keyring
        sudo chown $(whoami):$(whoami) ${CEPH_CONF_DIR}/ceph.client.${CINDER_BAK_CEPH_USER}.keyring

        iniset $CINDER_CONF DEFAULT backup_driver "cinder.backup.drivers.ceph.CephBackupDriver"
        iniset $CINDER_CONF DEFAULT backup_ceph_conf "$CEPH_CONF_FILE"
        iniset $CINDER_CONF DEFAULT backup_ceph_pool "$CINDER_BAK_CEPH_POOL"
        iniset $CINDER_CONF DEFAULT backup_ceph_user "$CINDER_BAK_CEPH_USER"
        iniset $CINDER_CONF DEFAULT backup_ceph_stripe_unit 0
        iniset $CINDER_CONF DEFAULT backup_ceph_stripe_count 0
        iniset $CINDER_CONF DEFAULT restore_discard_excess_bytes True
    fi
}

# Restore xtrace
$_XTRACE_CINDER_CEPH

# Local variables:
# mode: shell-script
# End:
